package cn.jietuo.juc.c_001_sync;

/**
 * @author zhangx & jietuo_zx@163.com
 * @version 1.0
 * @date 2020/5/4
 * @description: 常见的锁
 */
public class T01 {

    private static int count = 10;

    private Object o = new Object();

    // 必须拿到this这个锁对象才能进入执行下面的代码
    public synchronized void m1() {
        count--;
        System.out.println(Thread.currentThread().getName() + ",count:" + count);
    }

    public void m2(){
        // 任何程序要执行下面的代码，都必须要拿到this的锁 等同于m1方法
        synchronized (this){
            count--;
            System.out.println(Thread.currentThread().getName() + ",count:" + count);
        }
    }

    public void m3(){
        // 任何程序要执行下面的代码，都必须要拿到o的锁
        synchronized (o){
            count--;
            System.out.println(Thread.currentThread().getName() + ",count:" + count);
        }
    }

    // 任何程序要执行下面的代码，都必须要拿到T01.class的锁 即 静态方法的锁是XX.class
    public synchronized static void m4(){
        count--;
        System.out.println(Thread.currentThread().getName() + ",count:" + count);
    }
}
